package it.unipd.dei.bd.icineasti.servlet;

import it.unipd.dei.bd.icineasti.database.CreateMessaggioDatabase;
import it.unipd.dei.bd.icineasti.resource.Messaggio;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Timestamp;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet per l'inserimento dei messaggi/commenti nel db.
 * Verifica che la lunghezza del commento sia > 0 e che l'utente sia loggato.
 * Se l'utente e' loggato stampa in uscita il codice dell'evento associato,
 * altrimenti il link alla pagina di login.
 * 
 * @author Morris Antonello
 *
 */
public class CreateMessaggioServlet extends AbstractDatabaseServlet {

	/**
	 * Crea un nuovo messaggio.
	 * 
	 * @param req
	 *            la richiesta ricevuta dal client.
	 * @param res
	 *            la rispota fornita dal server.
	 * 
	 * @throws ServletException
	 *             se ci sono problemi nell'esecuzione della servlet.
	 * @throws IOException
	 *             se ci sono problemi nella comunicazione client-server.
	 */
	public void doPost(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

		// imposta il tipo MIME della risposta
		res.setContentType("text/html");
		
		// ottiene un flusso di uscita per scrivere la risposta
		PrintWriter out = res.getWriter();
		
		HttpSession session = req.getSession(true);
		
		int codiceEvento = Integer.parseInt(req.getParameter("codiceEvento")); // recuperato via javascript
		
		if (session.getAttribute("id_utente") != null) {
		
			int idUtente = Integer.parseInt(req.getParameter("id_utente"));
			Timestamp dataOra = new Timestamp(System.currentTimeMillis()); // l'utente vuole vedere l'ora secondo il proprio fuso orario
																		   // non devo fare affidamento sul timestamp lato client
			
			String titolo = ""; // colonna titolo inutile, da togliere
			String testo = req.getParameter("text");
			
			if (testo.length() > 0) {
			
				Messaggio m = new Messaggio(idUtente, "", "", dataOra, codiceEvento, titolo, testo);
		
				Connection con = null;
				
				try {
					con = DS.getConnection();
		
					new CreateMessaggioDatabase(con, m).createMessaggio();
		
				} catch (NullPointerException ex) {
					out.printf("<p><center><font color=\"red\" size=\"+2\">Impossibile creare la connessione al database.</font></center></p>");
				} catch (SQLException ex) {
					out.printf(
							"<p><center><font color=\"red\" size=\"+2\">Errore durante l'accesso al database: %s</font></center></p>",
							ex.getMessage());
				}
		
				
				
				out.printf("%s", codiceEvento);
				
				// old versions:
				//req.setAttribute("codiceEvento", codiceEvento);
				//req.getRequestDispatcher("html/scheda_film.jsp").forward(req, res);
				//res.sendRedirect("html/scheda_film.jsp?codiceEvento=" + codiceEvento);
				// res.sendRedirect("html/scheda_film.jsp");
						 // Typically, if the operation performs an edit on the datastore, 
						 // then a redirect, not a forward, is required.
		
			} else {
				
				out.printf("%s", codiceEvento);
				//res.sendRedirect("html/scheda_film.jsp?codiceEvento=" + codiceEvento);
				
			}
		} else {
			
			out.printf("./login.jsp");
			//res.sendRedirect("html/scheda_film.jsp?codiceEvento=" + codiceEvento);
			
		}
	
	}

}
